# _*_coding:utf-8_*_
#版本更新1：实现循环判断，思路先加一个死循环while1，可以实现不断输入，再加一个if。选中代码 统一进行缩进
#版本更新2：输入错误给与提示该如何输入，且实现对格式的控制
#版本更新3：对未包含的所有其他字符予以通过
#版本更新4(重构1)：对代码进行重构，使之变为pythonic (更多的使用python库中的函数),让它更精致，使用string库
#版本更新5(重构2）：去掉一些注释，去掉常量定义,直接使用string库中的函数，
import string

while 1:


    #TODO:用户输入密码
    user_password = input('请输入密码:')

    #TODO：判断密码的合法性(只是判断)

    #实现方法（要多想几种）：1 都打出来存进去，2 用ascii码表 3 不记得ascii码表 直接'A'<&&<'Z'

    #初始化对应条件的标准
    have_upper = False
    have_lower = False
    have_digit = False
    have_punctuation = False

    #遍历各个条件
    for char in user_password: #取消常量的定义，直接使用string库中的文件
        if char in string.ascii_uppercase:
            have_upper = True
        elif char in string.ascii_lowercase:
            have_lower = True
        elif char in string.digits:
            have_digit = True
        else:
            have_punctuation = True     #都不满足，则为其它字符
    have_enough_char = len(user_password) >= 8 #这是一个判断语句，结果输出是 True or False

    is_secure = have_upper \
        and have_lower \
        and have_digit \
        and have_punctuation \
        and have_enough_char
    #todo:输出结果
    print(is_secure)

    if is_secure:
        print('密码符合要求！')
        break
    else:
        tishi = '密码不符合要求，'
        if not have_enough_char:
            tishi = tishi + '长度不足8，'
        if not have_upper:         #这里要用if 而不能用elif ,elif是上一条指令不成立 才判断下一条指令 (这里可以都不满足 所以是\
                                                        #平行关系，所以用if
            tishi = tishi + '没有包含大写字符，'
        if not have_lower:
            tishi += '没有包含小写字符，'     # += 的快捷方式 -= 的快捷方式
        if not have_digit:
            tishi += '没有包含数字，'
        if not have_punctuation:
            tishi += '没有包含标点,'
        #优化：如何去掉末尾逗号，用切片

        tishi = tishi[:-1]       #去掉标准符号

        print(tishi)






